<?php

class Utiles {

    public $composaQueryR;

    public function composaQuery($columnes, $taules, $filtres, $grups, $filtresgrup, $ordenacio) {

        $resultat = true;
        $this->composaQueryR = "";


        //COLUMNES A SELECCIONAR
        if ($columnes != NULL) {
            $clausula = "SELECT";
            $elements = $columnes;
            composaElement($clausula, $elements);
        } else {
            $_SESSION['missatge'] = "msg-bbdd-010";
            $resultat = false;
        }

        //TAULES A SELECCIONAR
        if ($resultat) {
            if ($taules == NULL) {
                $_SESSION['missatge'] = "msg-bbdd-020";
                $resultat = false;
            } else {
                $clausula = " FROM";
                $elements = $taules;
                composaElement($clausula, $elements);
            }
        }

        //FILTRES WHERE, NO OBLIDAR LES CONDICIONS DE LES TAULES QUAN N'HI HA MÉS D'UNA
        if ($resultat) {
            if ($filtres != NULL) {
                $clausula = " WHERE";
                $elements = $filtres;
                composaElement($clausula, $elements);
            }
        }

        //AGRUPACIONS GROUP BY
        if ($resultat) {
            if ($grups != NULL) {
                $clausula = " GROUP BY";
                $elements = $grups;
                composaElement($clausula, $elements);
            }
        }

        //FILTRES DESPRÉS D'AGRUPAR
        if ($resultat) {
            if ($filtresgrup != NULL) {
                $clausula = " HAVING";
                $elements = $filtresgrup;
                composaElement($clausula, $elements);
            }
        }

        //ORDENACIÓ
        if ($resultat) {
            if ($ordenacio != NULL) {
                $clausula = " ORDER BY";
                $elements = $ordenacio;
                composaElement($clausula, $elements);
            }
        }

        return $resultat;
    }

    function composaElement($clausula, $elements) {
        $this->composaQueryR = $this->composaQueryR . $clausula . " ";
        $primer = true;
        foreach ($elements as $elem) {
            if ($primer) {
                $primer = false;
            } else {
                $this->composaQueryR = $this->composaQueryR + ", ";
            }
            $this->composaQueryR = $this->composaQueryR + $elem;
        }
    }

    public function checkValores($tipoDades, $nomDades, $valors) {
        $correcte = true;
        $i = 0;
        foreach ($nomDades as $index) {
            if ($valors[$i] != null && $tipoDades[$index] != gettype($valors[$i])) {
                $correcte = false;
                break;
            } else {
                $i = $i + 1;
            }
        }
        return $correcte;
    }

    public function comaNoms($elements) {

        $primer = true;
        foreach ($elements as $elem) {
            if ($primer) {
                $resultat = $resultat . $elem;
                $primer = false;
            } else {
                $resultat = $resultat . ", " . $elem;
            }
        }
        return $resultat;
    }

    public function comaValoresTipo($tipoDades, $nomDades, $valors) {

        $primer = true;
        $i = 0;
        foreach ($nomDades as $index) {
            $value = $valors[$i];
            $comilla = false;
            switch ($tipoDades[$index]) {
                case "string":
                    $comilla = true;
                    //$value = ($value != "") ? "'" . $value . "'" : "NULL";
                    break;
                case "int":
                    //$value = ($value != "") ? intval($value) : "NULL";
                    break;
                case "double":
                    //$value = ($value != "") ? doubleval($value) : "NULL";
                    break;
                case "date":
                    $comilla = true;
                    //$value = ($value != "") ? "'" . $value . "'" : "NULL";
                    break;
            }
            if ($primer) {
                if (!$comilla) {
                    $resultat = $resultat . $value;
                    $primer = false;
                } else {
                    $resultat = $resultat . "'".$value."'";
                    $primer = false;
                }
            } else {
                if (!$comilla) {
                $resultat = $resultat . ", " . $value;}
                else{
                    $resultat = $resultat . ", '".$value."'";
                }
            }
            $i = $i + 1;
        }
        return $resultat;
    }

    public function comaValoresNomTipo($tipoDades, $nomDades, $valors, $nexo) {

        $primer = true;
        $resultat = "";
        $i = 0;
        foreach ($nomDades as $index) {
            $value = $valors[$i];
            switch ($tipoDades[$index]) {
                case "string":
                    $value = ($value != "") ? "'" . $value . "'" : "NULL";
                    break;
                case "int":
                    $value = ($value != "") ? intval($value) : "NULL";
                    break;
                case "double":
                    $value = ($value != "") ? doubleval($value) : "NULL";
                    break;
                case "date":
                    $value = ($value != "") ? "'" . $value . "'" : "NULL";
                    break;
            }
            $value = $index . "=" . $value;
            if ($primer) {
                $resultat = $resultat . $value;
                $primer = false;
            } else {
                $resultat = $resultat . " " . $nexo . " " . $value;
            }
            $i = $i + 1;
        }
        return $resultat;
    }

    public function mostraDatafromBD($databd){
        $arrayData = date_parse($databd);
        $any = $arrayData['year'];
        $mes = $arrayData['month'];
        $dia = $arrayData['day'];
        return $dia."/".$mes."/".$any;
    }
    
    public function mostraTimefromBD($databd){
        $arrayData = date_parse($databd);
        $hora = $arrayData['hour'];
        $minut = $arrayData['minute'];
        return $hora.":".$minut;
    }
    
    
}

?>
